package yt.xgk.controller;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import yt.xgk.entity.Xgk2025;
import yt.xgk.mapper.Xgk2025Mapper;
import yt.xgk.service.impl.Xgk2025ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import java.util.List;
import java.util.Map;
import java.util.*;

/**
 * @author yt1105
 * @version 1.0
 */
//我们要是想要以后都返回的是json格式的
//@RestController 加上这个风格的话 我们每次进行的操作就可以进行的不是我们想哟的数据了 我们就可以进行查询的数据就
@Controller
@CrossOrigin
@RequestMapping("/books")
public class controllerXGK {

    @Autowired
    Xgk2025Mapper xgk2025Mapper;
    @Autowired
    Xgk2025ServiceImpl xgk2025Service;

    //PathVariable这代表我们从我们的路径中获取参数 id和我们的下面的id是进行对应的
    //这个就是有点冗余 不如我们直接去书写我们的正常的格式
    //@RequestMapping(value = "/{id}", method = RequestMethod.GET)
    @ResponseBody//将我们的控制器返回的值转化为json格式的代码进行处理
    @GetMapping("/{id}")//这个是只能使用get方式访问我们的路径 RequestMapping是所有的都可以进行访问我们的数据
    public Xgk2025 xgk2025(@PathVariable("id") String id) {
        return xgk2025Mapper.selectById(id);
        //返回状态码
    }

    @GetMapping("/showAll")
    @ResponseBody
    public List<Xgk2025> xgk2025List() {
        return xgk2025Mapper.selectList(null);
    }

    //添加用户信息
    @PostMapping("/addAny")
    @ResponseBody
    //我们这里需要注意的就是我们的json格式的对象就是我们的将我们返回的数据进行一个包装我们必须确定是可行的
    //插入数据不行
    public void saveUser(@RequestBody Xgk2025 xgk2025) {
        Log log = LogFactory.getLog(getClass());
        log.info(xgk2025.getName() + xgk2025.getRanking());
        xgk2025Mapper.insert(xgk2025);
    }


    //这个是更新我们的数据
    @PutMapping("/updateByAny")
    @ResponseBody
    public String updateData(
            @RequestParam(
                    name = "setValueName"
            ) String setValueName,
            @RequestParam(
                    name = "setValue"
            ) String setValue,
            @RequestParam(
                    name = "valueName"
            ) String valueName,
            @RequestParam(
                    name = "value"
            ) String value
    ) {
        System.out.printf(setValueName);
        xgk2025Service.updateData(setValueName, setValue, valueName, value);
        return "更新数据成功";
    }

    //根据我们的name进行数据的查询
    @GetMapping("/selectByName")
    @ResponseBody
    public List<Map<String, Object>> xgk2025Like(@RequestParam(
            name = "Name"      // 前端调用需要的参数
    ) String likeName) {
        return xgk2025Service.xgk2025Like(likeName);
    }

    @GetMapping("/selectByRanking")
    @ResponseBody
    public List<Map<String, Object>> xgk2025LikeRanking(@RequestParam(
            name = "ranking"      // 前端调用需要的参数
    ) String ranking) {
        return xgk2025Service.selectByRanking(ranking);
    }

    //根据我们的id进行查询我们的数据
    @GetMapping("/selectById")
    @ResponseBody
    public List<Map<String, Object>> xgk2025LikeID(@RequestParam(
            name = "ID"      // 前端调用需要的参数
    ) Integer likeID) {
        return xgk2025Service.xgk2025LikeId(likeID);
    }

    @DeleteMapping("/deleteByID")//这个是根据我们的name进行删除
    @ResponseBody
    public String xgk2025DeleteById(@RequestParam(
            name = "id"      // 前端调用需要的参数
    ) String id) {
        QueryWrapper<Xgk2025> wrapper = new QueryWrapper<>();
        wrapper.eq("university_id", id);
        xgk2025Service.remove(wrapper);//这里是具体执行的地方 也即是我们要进行删除的地方这个是我们需要注意的地方
        return "删除id成功!!!";
    }


    @DeleteMapping("/deleteByName")//这个是根据我们的name进行删除
    @ResponseBody
    public String xgk2025Delete(@RequestParam(
            name = "name"      // 前端调用需要的参数
    ) String name) {
        QueryWrapper<Xgk2025> wrapper = new QueryWrapper<>();
        wrapper.eq("name", name);
        xgk2025Service.remove(wrapper);//这里是具体执行的地方 也即是我们要进行删除的地方这个是我们需要注意的地方
        return "删除成功!!!";
    }

    @GetMapping("/selectAllData")
    @ResponseBody
    public List<Xgk2025> xgk2025List11() {

        return xgk2025Service.selectAllData();
    }

    @GetMapping("/selectByLocation")
    @ResponseBody
    public List<Map<String, Object>> selectLocation(@RequestParam(
            name = "location"      // 前端调用需要的参数
    ) String location) {

        return xgk2025Service.selectLocation(location);
    }

    @GetMapping("/pages")
    @ResponseBody
    public List<Xgk2025> selectPage(@RequestParam(name = "page1") int page) {
        page = (page - 1) * 30;
        List<Xgk2025> pages = xgk2025Mapper.selectByPage1(page);
        return pages;
    }

}
